package com.ruoyi.product.service.impl;

import java.util.Date;
import java.util.List;

import cn.hutool.core.collection.CollUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.constant.BizCodeConstants;
import com.ruoyi.common.constant.CommonConst;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.IdGenerator;
import com.ruoyi.product.domain.*;
import com.ruoyi.product.dto.*;
import com.ruoyi.product.mapper.ProductMapper;
import com.ruoyi.product.service.IProductImgService;
import com.ruoyi.product.service.IProductPriceService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.product.mapper.ProductBrowseMapper;
import com.ruoyi.product.service.IProductBrowseService;
import com.ruoyi.common.core.text.Convert;

/**
 * 商品浏览历史Service业务层处理
 *
 * @author tanfp
 * @date 2020-12-30
 */
@Service
public class ProductBrowseServiceImpl implements IProductBrowseService {
    @Autowired
    private ProductBrowseMapper productBrowseMapper;

    @Autowired
    private ProductMapper productMapper;

    @Autowired
    private IProductImgService productImgService;

    @Autowired
    private IProductPriceService productPriceService;


    @Override
    public AjaxResult addBrowse(Long userId, Long productId) {
        // 查询商品是否存在
        Product queryProduct = new Product();
        queryProduct.setKeyId(productId);
        queryProduct.setDelStatus(CommonConst.DEL_FALSE);
        List<Product> products = productMapper.selectProductList(queryProduct);
        if (CollUtil.isEmpty(products)) {
            return AjaxResult.error(BizCodeConstants.PRODUCT_NOT_EXIST, "商品不存在");
        }

        ProductBrowse query = new ProductBrowse();
        query.setDelStatus(CommonConst.DEL_FALSE);
        query.setUserId(userId);
        query.setProductId(productId);
        List<ProductBrowse> productBrowses = productBrowseMapper.selectProductBrowseList(query);

        if (CollUtil.isEmpty(productBrowses)) {
            // 新增浏览
            ProductBrowse insert = new ProductBrowse();
            insert.setKeyId(IdGenerator.getId());
            insert.setUserId(userId);
            insert.setCreateBy(String.valueOf(userId));
            insert.setCreateTime(new Date());
            insert.setUpdateBy(insert.getCreateBy());
            insert.setUpdateTime(insert.getCreateTime());
            Product p = products.get(0);
            ProductImg img = productImgService.selectProductImgById(p.getImgId());
            insert.setProductImg(img.getImgUrl());
            ProductPrice price = productPriceService.selectProductPriceById(p.getPriceId());
            insert.setProductOriginPrice(price.getProductOriginPrice());
            insert.setProductPrice(price.getProductPrice());
            insert.setUnit(price.getUnit());
            insert.setProductId(productId);
            productBrowseMapper.insertProductBrowse(insert);
        } else {
            ProductBrowse productBrowse = productBrowses.get(0);
            productBrowse.setUpdateTime(new Date());
            productBrowse.setUpdateBy(String.valueOf(userId));
            productBrowseMapper.updateProductBrowse(productBrowse);
        }
        return AjaxResult.success();
    }

    @Override
    public AjaxResult addBrowse(Long userId, BrowseAddParam param) {
        Long productId = param.getProductId();
        // 查询商品是否存在
        Product queryProduct = new Product();
        queryProduct.setKeyId(productId);
        queryProduct.setDelStatus(CommonConst.DEL_FALSE);
        List<Product> products = productMapper.selectProductList(queryProduct);
        if (CollUtil.isEmpty(products)) {
            return AjaxResult.error(BizCodeConstants.PRODUCT_NOT_EXIST, "商品不存在");
        }

        ProductBrowse query = new ProductBrowse();
        query.setDelStatus(CommonConst.DEL_FALSE);
        query.setUserId(userId);
        query.setProductId(productId);
        List<ProductBrowse> productBrowses = productBrowseMapper.selectProductBrowseList(query);

        if (CollUtil.isEmpty(productBrowses)) {
            // 新增浏览
            ProductBrowse insert = new ProductBrowse();
            BeanUtils.copyProperties(param, insert);
            insert.setKeyId(IdGenerator.getId());
            insert.setUserId(userId);
            insert.setCreateBy(String.valueOf(userId));
            insert.setCreateTime(new Date());
            insert.setUpdateBy(insert.getCreateBy());
            insert.setUpdateTime(insert.getCreateTime());
            productBrowseMapper.insertProductBrowse(insert);
        } else {
            ProductBrowse productBrowse = productBrowses.get(0);
            productBrowse.setUpdateTime(new Date());
            productBrowse.setUpdateBy(String.valueOf(userId));
            productBrowseMapper.updateProductBrowse(productBrowse);
        }
        return AjaxResult.success();
    }

    @Override
    public AjaxResult delBrowses(Long userId, List<String> productIds) {
        if (CollUtil.isEmpty(productIds)) {
            return AjaxResult.success();
        }
        productBrowseMapper.deleteProductBrowse(userId, productIds);
        return AjaxResult.success();
    }

    @Override
    public AjaxResult queryBrowses(Long userId, PageQuery pageQuery) {
        // 通过用户id获取该用户所有的收藏商品
        ProductBrowse query = new ProductBrowse();
        query.setUserId(userId);
        query.setDelStatus(CommonConst.DEL_FALSE);
        List<ProductBrowse> productFavorites = productBrowseMapper.selectProductBrowseList(query);
        if (CollUtil.isEmpty(productFavorites)) {
            return AjaxResult.success();
        }

        PageHelper.startPage(pageQuery.getPageNum(), pageQuery.getPageSize());
        List<ProductBrowseDTO> productBrowseDTOS = productBrowseMapper.selectListByUserId(userId);
        PageInfo<ProductBrowseDTO> pageInfo = PageInfo.of(productBrowseDTOS);
        return AjaxResult.success(pageInfo);
    }

    /**
     * 查询商品浏览历史
     *
     * @param keyId 商品浏览历史ID
     * @return 商品浏览历史
     */
    @Override
    public ProductBrowse selectProductBrowseById(Long keyId) {
        return productBrowseMapper.selectProductBrowseById(keyId);
    }

    /**
     * 查询商品浏览历史列表
     *
     * @param productBrowse 商品浏览历史
     * @return 商品浏览历史
     */
    @Override
    public List<ProductBrowse> selectProductBrowseList(ProductBrowse productBrowse) {
        return productBrowseMapper.selectProductBrowseList(productBrowse);
    }

    /**
     * 新增商品浏览历史
     *
     * @param productBrowse 商品浏览历史
     * @return 结果
     */
    @Override
    public int insertProductBrowse(ProductBrowse productBrowse) {
        productBrowse.setCreateTime(DateUtils.getNowDate());
        return productBrowseMapper.insertProductBrowse(productBrowse);
    }

    /**
     * 修改商品浏览历史
     *
     * @param productBrowse 商品浏览历史
     * @return 结果
     */
    @Override
    public int updateProductBrowse(ProductBrowse productBrowse) {
        productBrowse.setUpdateTime(DateUtils.getNowDate());
        return productBrowseMapper.updateProductBrowse(productBrowse);
    }

    /**
     * 删除商品浏览历史对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteProductBrowseByIds(String ids) {
        return productBrowseMapper.deleteProductBrowseByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除商品浏览历史信息
     *
     * @param keyId 商品浏览历史ID
     * @return 结果
     */
    @Override
    public int deleteProductBrowseById(Long keyId) {
        return productBrowseMapper.deleteProductBrowseById(keyId);
    }

}
